home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / SOX2Writer.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  10.0 KB  |  363 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.util.StringUtilities;
  4. import com.extensibility.xml.dt.DataType;
  5. import com.extensibility.xml.dt.DataTypeIntf;
  6. import com.extensibility.xml.dt.Facet;
  7. import java.util.Enumeration;
  8. import java.util.Hashtable;
  9. import java.util.Vector;
  10.  
  11. public class SOX2Writer extends SchemaWriter {
  12.    ElemProxy elemProxy = new ElemProxy(this);
  13.    AttrProxy attrProxy = new AttrProxy(this);
  14.    DTProxy dtProxy = new DTProxy(this);
  15.  
  16.    public SOX2Writer(SchemaIntf var1) {
  17.       super(var1, var1.getURI());
  18.    }
  19.  
  20.    public SOX2Writer(SchemaIntf var1, URI var2) {
  21.       super(var1, var2);
  22.    }
  23.  
  24.    private String qualifiedAttrName(String var1) {
  25.       AttributeDeclaration var2 = (AttributeDeclaration)super.schema.getNamedDeclaration(var1, Class.forName("com.extensibility.xml.AttributeDeclaration"));
  26.       return var2 != null && var2.isGlobal() ? ((SchemaWriter)this).getQName(var1, Class.forName("com.extensibility.xml.AttributeDeclaration")) : var1;
  27.    }
  28.  
  29.    private void writeExplain(SXE var1, BaseDeclaration var2) {
  30.       Enumeration var3 = var2.getComments();
  31.       if (var3 != null && var3.hasMoreElements()) {
  32.          int var4 = 0;
  33.  
  34.          while(var3.hasMoreElements()) {
  35.             Comment var5 = (Comment)var3.nextElement();
  36.             if (var5.getKind().equals("USAGE")) {
  37.                ++var4;
  38.             }
  39.          }
  40.  
  41.          if (var4 != 0) {
  42.             var3 = var2.getComments();
  43.             var1.writeElem("explain", -1);
  44.  
  45.             while(var3.hasMoreElements()) {
  46.                Comment var7 = (Comment)var3.nextElement();
  47.                if (var7.getKind().equals("USAGE")) {
  48.                   this.writeValidHTML(var1, var7.getComment(false));
  49.                }
  50.             }
  51.  
  52.             var1.flush("explain");
  53.          }
  54.       }
  55.    }
  56.  
  57.    private void writeDatatypeNameRef(SXE var1, DataTypeIntf var2, boolean var3) {
  58.       String var4 = "datatype";
  59.       if (var2 == null) {
  60.          var1.writeAttr(var4, "string");
  61.       } else {
  62.          Object var5 = null;
  63.          String var6;
  64.          if (!var3) {
  65.             var6 = super.schema.getDataTypeSource(var2);
  66.          } else {
  67.             var6 = BaseFlavor.getSourceCode(super.schema.getFlavorName(), var2.getBaseType());
  68.          }
  69.  
  70.          if (var6.indexOf(58) >= 0) {
  71.             var1.writeAttr("prefix", var6.substring(0, var6.indexOf(58)));
  72.             var1.writeAttr(var4, var6.substring(var6.indexOf(58) + 1));
  73.          } else {
  74.             var1.writeAttr(var4, var6);
  75.          }
  76.  
  77.       }
  78.    }
  79.  
  80.    private void writeEnumeration(SXE var1, BaseDeclaration var2, boolean var3) {
  81.       Object var4 = null;
  82.       Object var5 = null;
  83.       Object var6 = null;
  84.       DataType var9;
  85.       Enumeration var10;
  86.       Hashtable var11;
  87.       if (var2 instanceof DataTypeDeclaration) {
  88.          var9 = ((DataTypeDeclaration)var2).getDataType();
  89.          Facet var7 = var9.getFacet(Facet.FACET_ENUM_NAME);
  90.          var11 = var7.getExplains();
  91.          Vector var8 = (Vector)var7.getValue();
  92.          var10 = var8.elements();
  93.       } else {
  94.          if (!(var2 instanceof AttributeDeclaration)) {
  95.             return;
  96.          }
  97.  
  98.          var9 = ((AttributeDeclaration)var2).getDataType();
  99.          var10 = ((AttributeDeclaration)var2).getChoices(var2.getSchema(), true);
  100.          var11 = ((AttributeDeclaration)var2).getChoicesExplains();
  101.       }
  102.  
  103.       var1.writeElem("enumeration", -1);
  104.       this.writeDatatypeNameRef(var1, var9, var3);
  105.  
  106.       while(var10.hasMoreElements()) {
  107.          String var12 = (String)var10.nextElement();
  108.          if (var11 != null && var11.containsKey(var12)) {
  109.             String var13 = (String)var11.get(var12);
  110.             if (var13 != null) {
  111.                var1.writeElem("explain", -1);
  112.                this.writeValidHTML(var1, var13);
  113.                var1.flush("explain");
  114.             }
  115.          }
  116.  
  117.          var1.writeElem("option", -1);
  118.          var1.writeText(var12);
  119.          var1.flush("option");
  120.       }
  121.  
  122.       var1.flush("enumeration");
  123.    }
  124.  
  125.    private void writeDataTypeData(SXE var1, BaseDeclaration var2, DataTypeIntf var3, boolean var4) {
  126.       if (var3.hasFacet(Facet.FACET_ENUM_NAME)) {
  127.          this.writeEnumeration(var1, var2, var4);
  128.       } else if (var3.hasFacet(Facet.FACET_MAXLENGTH_NAME)) {
  129.          var1.writeElem("varchar", -1);
  130.          this.writeDatatypeNameRef(var1, var3, var4);
  131.          Facet var5 = var3.getFacet(Facet.FACET_MAXLENGTH_NAME);
  132.          var1.writeAttr("maxlength", (String)var5.getValue());
  133.          var1.flush("varchar");
  134.       } else if (!var3.hasFacet(Facet.FACET_DECIMALS_NAME) && !var3.hasFacet(Facet.FACET_DIGITS_NAME) && !var3.hasFacet(Facet.FACET_MAXEX_NAME) && !var3.hasFacet(Facet.FACET_MINEX_NAME) && !var3.hasFacet(Facet.FACET_MAX_NAME) && !var3.hasFacet(Facet.FACET_MIN_NAME)) {
  135.          if (var4) {
  136.             var1.writeElem("scalar", -1);
  137.             this.writeDatatypeNameRef(var1, var3, var4);
  138.             var1.flush("scalar");
  139.          }
  140.       } else {
  141.          var1.writeElem("scalar", -1);
  142.          this.writeDatatypeNameRef(var1, var3, var4);
  143.          Object var6 = null;
  144.          if (var3.hasFacet(Facet.FACET_DIGITS_NAME)) {
  145.             Facet var7 = var3.getFacet(Facet.FACET_DIGITS_NAME);
  146.             var1.writeAttr("digits", (String)var7.getValue());
  147.          }
  148.  
  149.          if (var3.hasFacet(Facet.FACET_DECIMALS_NAME)) {
  150.             Facet var8 = var3.getFacet(Facet.FACET_DECIMALS_NAME);
  151.             var1.writeAttr("decimals", (String)var8.getValue());
  152.          }
  153.  
  154.          if (var3.hasFacet(Facet.FACET_MIN_NAME)) {
  155.             Facet var9 = var3.getFacet(Facet.FACET_MIN_NAME);
  156.             var1.writeAttr("minvalue", (String)var9.getValue());
  157.          }
  158.  
  159.          if (var3.hasFacet(Facet.FACET_MINEX_NAME)) {
  160.             Facet var10 = var3.getFacet(Facet.FACET_MINEX_NAME);
  161.             var1.writeAttr("minexclusive", (String)var10.getValue());
  162.          }
  163.  
  164.          if (var3.hasFacet(Facet.FACET_MAX_NAME)) {
  165.             Facet var11 = var3.getFacet(Facet.FACET_MAX_NAME);
  166.             var1.writeAttr("maxvalue", (String)var11.getValue());
  167.          }
  168.  
  169.          if (var3.hasFacet(Facet.FACET_MAXEX_NAME)) {
  170.             Facet var12 = var3.getFacet(Facet.FACET_MAXEX_NAME);
  171.             var1.writeAttr("maxexclusive", (String)var12.getValue());
  172.          }
  173.  
  174.          var1.flush("scalar");
  175.       }
  176.  
  177.    }
  178.  
  179.    private void writeTopLevelComments(SXE var1, BaseDeclaration var2) {
  180.       Enumeration var3 = var2.getComments();
  181.       if (var3 != null && var3.hasMoreElements()) {
  182.          int var4 = 0;
  183.  
  184.          while(var3.hasMoreElements()) {
  185.             Comment var5 = (Comment)var3.nextElement();
  186.             if (!var5.getKind().equals("USAGE")) {
  187.                ++var4;
  188.             }
  189.          }
  190.  
  191.          if (var4 != 0) {
  192.             var3 = var2.getComments();
  193.  
  194.             while(var3.hasMoreElements()) {
  195.                Comment var7 = (Comment)var3.nextElement();
  196.                if (!var7.getKind().equals("USAGE") && !var7.getKind().equals("INTRO")) {
  197.                   var1.writeElem("comment", -1);
  198.                   var1.writeText(var7.getComment(true));
  199.                   var1.flush("comment");
  200.                }
  201.             }
  202.  
  203.          }
  204.       }
  205.    }
  206.  
  207.    public void writeAttrGroup(SXE var1, Enumeration var2, AttrProxy var3) {
  208.       while(var2.hasMoreElements()) {
  209.          AttributeGroupMember var4 = (AttributeGroupMember)var2.nextElement();
  210.          if (var4 instanceof AttributeDeclaration) {
  211.             var3.setDecl((AttributeDeclaration)var4);
  212.             var3.writeType(var1, true);
  213.          }
  214.       }
  215.  
  216.    }
  217.  
  218.    protected void writeHeader(SXE var1) {
  219.       var1.writeDocType("schema", "urn:x-commerceone:document:com:commerceone:xdk:xml:schema.dtd$1.0");
  220.       var1.writeLineBreak();
  221.       var1.writeComment("Generated by XML Authority. Conforms to Commerce One SOX 2.0");
  222.       var1.writeElem("schema");
  223.       URI var2 = super.schema.getNamespace();
  224.       if (var2 == null || var2.toSource().equals("")) {
  225.          var2 = super.schema.getURI();
  226.       }
  227.  
  228.       var1.writeAttr("uri", var2.getFullName());
  229.       String var3 = super.schema.getSchemaPrefix();
  230.       if (var3 != null && var3.length() > 0) {
  231.          var1.writeAttr("prefix", var3);
  232.       }
  233.  
  234.       var1.writeAttr("soxlang-version", "V0.2.2");
  235.       if (super.schema.getNamedNamespace("exv") == null && ((SchemaWriter)this).getShowErrors()) {
  236.          var1.writeLineBreak();
  237.          var1.writeAttr("xmlns:exv", "urn:extensibility:exv:errors");
  238.       }
  239.  
  240.       boolean var4 = false;
  241.       Enumeration var5 = null;
  242.       if (super.uri.getBaseURI() == null) {
  243.          var5 = super.schema.getComments();
  244.       } else {
  245.          String var6 = DTDUtilities.makeValidName(super.uri.getShortName());
  246.          ExternalSubset var7 = (ExternalSubset)super.schema.getNamedDeclaration(var6, Class.forName("com.extensibility.xml.ExternalSubset"));
  247.          var4 = true;
  248.          if (var7 != null) {
  249.             var5 = ((BaseDeclaration)var7).getComments();
  250.          }
  251.       }
  252.  
  253.       if (var5 != null && var5.hasMoreElements()) {
  254.          var1.writeElem("intro", -1);
  255.  
  256.          while(var5.hasMoreElements()) {
  257.             Comment var8 = (Comment)var5.nextElement();
  258.             if (!var4 || var8.getKind().equals("INTRO")) {
  259.                this.writeValidHTML(var1, var8.getComment(false));
  260.             }
  261.          }
  262.  
  263.          var1.flush("intro");
  264.       }
  265.    }
  266.  
  267.    protected void writeNamespaces(SXE var1, Enumeration var2) {
  268.       while(var2.hasMoreElements()) {
  269.          NamespaceDeclaration var3 = (NamespaceDeclaration)var2.nextElement();
  270.          this.writeTopLevelComments(var1, var3);
  271.          String var4 = ((BaseDeclaration)var3).getName();
  272.          var1.writeElem("namespace");
  273.          if (var4.length() > 0) {
  274.             var1.writeAttr("prefix", var4);
  275.          }
  276.  
  277.          if (var3.getNamespace() != null) {
  278.             var1.writeAttr("namespace", var3.getNamespace());
  279.          } else {
  280.             var1.writeAttr("namespace", "");
  281.          }
  282.  
  283.          this.writeExplain(var1, var3);
  284.          var1.flush("namespace");
  285.       }
  286.  
  287.    }
  288.  
  289.    protected void writeIncludes(SXE var1, Enumeration var2) {
  290.       for(; var2.hasMoreElements(); var1.flush("join")) {
  291.          ExternalSubset var3 = (ExternalSubset)var2.nextElement();
  292.          this.writeTopLevelComments(var1, var3);
  293.          var1.writeElem("join", -1);
  294.          var1.writeAttr("datatype", "schema");
  295.          String var4 = var3.getSystemURI().toSource();
  296.          var1.writeAttr("system", var4);
  297.          if (((BaseDeclaration)var3).hasComments()) {
  298.             this.writeExplain(var1, var3);
  299.          }
  300.       }
  301.  
  302.    }
  303.  
  304.    private void writeValidHTML(SXE var1, String var2) {
  305.       int var3 = StringUtilities.skipWhite(var2, 0);
  306.       if (var3 < var2.length() && var2.charAt(var3) != '<') {
  307.          var1.writeRawText("<p>");
  308.          var1.writeRawText(var2);
  309.          var1.writeRawText("</p>");
  310.       } else {
  311.          var1.writeRawText(var2);
  312.       }
  313.  
  314.    }
  315.  
  316.    protected SchemaWriter.DeclWriterProxyIntf createProxy(ElementDeclaration var1) {
  317.       if (this.elemProxy == null) {
  318.          this.elemProxy = new ElemProxy(this);
  319.       }
  320.  
  321.       this.elemProxy.setDecl(var1);
  322.       return this.elemProxy;
  323.    }
  324.  
  325.    protected SchemaWriter.DeclWriterProxyIntf createProxy(AttributeDeclaration var1) {
  326.       if (this.attrProxy == null) {
  327.          this.attrProxy = new AttrProxy(this);
  328.       }
  329.  
  330.       this.attrProxy.setDecl(var1);
  331.       return this.attrProxy;
  332.    }
  333.  
  334.    protected SchemaWriter.DeclWriterProxyIntf createProxy(DataTypeDeclaration var1) {
  335.       if (this.dtProxy == null) {
  336.          this.dtProxy = new DTProxy(this);
  337.       }
  338.  
  339.       this.dtProxy.setDecl(var1);
  340.       return this.dtProxy;
  341.    }
  342.  
  343.    // $FF: synthetic method
  344.    static void access$2000171(SOX2Writer var0, SXE var1, BaseDeclaration var2) {
  345.       var0.writeTopLevelComments(var1, var2);
  346.    }
  347.  
  348.    // $FF: synthetic method
  349.    static void access$2000271(SOX2Writer var0, SXE var1, BaseDeclaration var2, DataTypeIntf var3, boolean var4) {
  350.       var0.writeDataTypeData(var1, var2, var3, var4);
  351.    }
  352.  
  353.    // $FF: synthetic method
  354.    static void access$2000371(SOX2Writer var0, SXE var1, DataTypeIntf var2, boolean var3) {
  355.       var0.writeDatatypeNameRef(var1, var2, var3);
  356.    }
  357.  
  358.    // $FF: synthetic method
  359.    static void access$2000071(SOX2Writer var0, SXE var1, BaseDeclaration var2) {
  360.       var0.writeExplain(var1, var2);
  361.    }
  362. }
  363.